/*	Interface for all lower level behaviors.  Behaviors must implement these methods.

*/

#ifndef BASEBEHAVIOR_H_
#define BASEBEHAVIOR_H_

#include "BlackBoard.h"
#include "BehaviorController.h"
#include <string>

class BehaviorController;

class BaseBehavior
{
public:
	BaseBehavior()		{	/*	Interface only.	*/	}
	~BaseBehavior()		{	/*	Interface only.	*/	}

	virtual void Enter()=0;	//	{	/*	Interface only.	*/	}	// Call on start of behavior
	virtual void Execute()=0;//		{	/*	Interface only.	*/	}	// Call on action itself; this implements the main logic of the behavior
	virtual void Exit()	=0;//		{	/*	Interface only.	*/	}	// Call at end of behavior

	virtual bool CheckConditions()		{	return false;	} // Can we enter and execute this behavior?
	
	virtual BehaviorController* GetControl()	{	return NULL;	} // Gets pointer to this task's Controller/ParentBehavior

	virtual std::string GetName()	{	return	"";		}

private: // Nothing, this is a purely abstract base class and serves as an interface.

};

#endif
